1 using ProceduralToolkit.Examples.UI;
2 using UnityEngine;
3
4 namespace ProceduralToolkit.Examples
5 {
6 public class LowPolyTerrainGeneratorConfigurator : ConfiguratorBase
7 {
8 public MeshFilter terrainMeshFilter;
9 public RectTransform leftPanel;
10 public bool constantSeed = false;
11 public LowPolyTerrainGenerator.Config config = new LowPolyTerrainGenerator.Config();
12
13 private const int minXSize = 10;
14 private const int maxXSize = 30;
15 private const int minYSize = 1;
16 private const int maxYSize = 5;
17 private const int minZSize = 10;
18 private const int maxZSize = 30;
19 private const float minCellSize = 0.3f;
20 private const float maxCellSize = 2;
21 private const int minNoiseScale = 1;
22 private const int maxNoiseScale = 20;
23
24 private Mesh terrainMesh;
25
26 private void Awake()
27 {
28 Generate();
29 SetupSkyboxAndPalette();
30
31 InstantiateControl<SliderControl>(leftPanel)
32 .Initialize("Terrain size X", minXSize, maxXSize, (int) config.terrainSize.x, value =>
33 {
34 config.terrainSize.x = value;
35 Generate();
36 });
37
38 InstantiateControl<SliderControl>(leftPanel)
39 .Initialize("Terrain size Y", minYSize, maxYSize, (int) config.terrainSize.y, value =>
40 {
41 config.terrainSize.y = value;
42 Generate();
43 });
44
45 InstantiateControl<SliderControl>(leftPanel)
46 .Initialize("Terrain size Z", minZSize, maxZSize, (int) config.terrainSize.z, value =>
47 {
48 config.terrainSize.z = value;
49 Generate();
50 });
51
52 InstantiateControl<SliderControl>(leftPanel)
53 .Initialize("Cell size", minCellSize, maxCellSize, config.cellSize, value =>
54 {
55 config.cellSize = value;
56 Generate();
57 });
58
59 InstantiateControl<SliderControl>(leftPanel)
60 .Initialize("Noise scale", minNoiseScale, maxNoiseScale, (int) config.noiseScale, value =>
61 {
62 config.noiseScale = value;
63 Generate();
64 });
65
66 InstantiateControl<ButtonControl>(leftPanel).Initialize("Generate", () => Generate());
67 }
68
69 private void Update()
70 {
71 UpdateSkybox();
72 }
73
74 public void Generate(bool randomizeConfig = true)
75 {
76 if (constantSeed)
77 {
78 Random.InitState(0);
79 }
80
81 if (randomizeConfig)
82 {
83 GeneratePalette();
84
85 config.gradient = ColorE.Gradient(from: GetMainColorHSV(), to: GetSecondaryColorHSV());
86 }
87
88 var draft = LowPolyTerrainGenerator.TerrainDraft(config);
89 draft.Move(Vector3.left*config.terrainSize.x/2 + Vector3.back*config.terrainSize.z/2);
90 AssignDraftToMeshFilter(draft, terrainMeshFilter, ref terrainMesh);
91 }
92 }
93 }